/**
 * 类式继承：通过子类的prototype对父类实例化来实现
 * 构造函数式继承：通过在子类的构造函数作用环境中执行一次父类的构造函数来实现
 * 
 * 组合继承：结合了类式继承、构造函数式继承以上两个特点
 * 
 * 优点
 *      1、
 *      2、
 */
// 声明父类
function SuperClass(name) {
    this.name = name;
    this.books = ['JavaScript', 'html', 'css'];
}
// 父类原型共有方法
SuperClass.prototype.getName = function() {
    console.log(this.name);
}
// 声明子类
function SubClass(name, time) {
    // 构造函数式继承父类name属性
    SuperClass.call(this, name);
    // 子类中新增共有属性
    this.time = time;
}
// 类式继承 子类原型继承父类
SubClass.prototype = new SuperClass();
// 子类原型方法
SubClass.prototype.getTime = function() {
    console.log(this.time);
};

var instance1 = new SubClass('js book', 2014);
var instance2 = new SubClass('css book', 2013);

instance1.books.push('设计模式');

console.log(instance1.books);// ["JavaScript", "html", "css", "设计模式"] 
console.log(instance2.books);// ["JavaScript", "html", "css"]

instance1.getName();//js book
instance1.getTime();//2014

instance2.getName();//css book
instance2.getTime();//2013
